home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / libcruft / lapack / dlanst.f < prev    next >
Text File  |  1997-06-25  |  4KB  |  126 lines

  1.       DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
  2. *
  3. *  -- LAPACK auxiliary routine (version 2.0) --
  4. *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
  5. *     Courant Institute, Argonne National Lab, and Rice University
  6. *     February 29, 1992
  7. *
  8. *     .. Scalar Arguments ..
  9.       CHARACTER          NORM
  10.       INTEGER            N
  11. *     ..
  12. *     .. Array Arguments ..
  13.       DOUBLE PRECISION   D( * ), E( * )
  14. *     ..
  15. *
  16. *  Purpose
  17. *  =======
  18. *
  19. *  DLANST  returns the value of the one norm,  or the Frobenius norm, or
  20. *  the  infinity norm,  or the  element of  largest absolute value  of a
  21. *  real symmetric tridiagonal matrix A.
  22. *
  23. *  Description
  24. *  ===========
  25. *
  26. *  DLANST returns the value
  27. *
  28. *     DLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm'
  29. *              (
  30. *              ( norm1(A),         NORM = '1', 'O' or 'o'
  31. *              (
  32. *              ( normI(A),         NORM = 'I' or 'i'
  33. *              (
  34. *              ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
  35. *
  36. *  where  norm1  denotes the  one norm of a matrix (maximum column sum),
  37. *  normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
  38. *  normF  denotes the  Frobenius norm of a matrix (square root of sum of
  39. *  squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.
  40. *
  41. *  Arguments
  42. *  =========
  43. *
  44. *  NORM    (input) CHARACTER*1
  45. *          Specifies the value to be returned in DLANST as described
  46. *          above.
  47. *
  48. *  N       (input) INTEGER
  49. *          The order of the matrix A.  N >= 0.  When N = 0, DLANST is
  50. *          set to zero.
  51. *
  52. *  D       (input) DOUBLE PRECISION array, dimension (N)
  53. *          The diagonal elements of A.
  54. *
  55. *  E       (input) DOUBLE PRECISION array, dimension (N-1)
  56. *          The (n-1) sub-diagonal or super-diagonal elements of A.
  57. *
  58. *  =====================================================================
  59. *
  60. *     .. Parameters ..
  61.       DOUBLE PRECISION   ONE, ZERO
  62.       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
  63. *     ..
  64. *     .. Local Scalars ..
  65.       INTEGER            I
  66.       DOUBLE PRECISION   ANORM, SCALE, SUM
  67. *     ..
  68. *     .. External Functions ..
  69.       LOGICAL            LSAME
  70.       EXTERNAL           LSAME
  71. *     ..
  72. *     .. External Subroutines ..
  73.       EXTERNAL           DLASSQ
  74. *     ..
  75. *     .. Intrinsic Functions ..
  76.       INTRINSIC          ABS, MAX, SQRT
  77. *     ..
  78. *     .. Executable Statements ..
  79. *
  80.       IF( N.LE.0 ) THEN
  81.          ANORM = ZERO
  82.       ELSE IF( LSAME( NORM, 'M' ) ) THEN
  83. *
  84. *        Find max(abs(A(i,j))).
  85. *
  86.          ANORM = ABS( D( N ) )
  87.          DO 10 I = 1, N - 1
  88.             ANORM = MAX( ANORM, ABS( D( I ) ) )
  89.             ANORM = MAX( ANORM, ABS( E( I ) ) )
  90.    10    CONTINUE
  91.       ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
  92.      $         LSAME( NORM, 'I' ) ) THEN
  93. *
  94. *        Find norm1(A).
  95. *
  96.          IF( N.EQ.1 ) THEN
  97.             ANORM = ABS( D( 1 ) )
  98.          ELSE
  99.             ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ),
  100.      $              ABS( E( N-1 ) )+ABS( D( N ) ) )
  101.             DO 20 I = 2, N - 1
  102.                ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
  103.      $                 ABS( E( I-1 ) ) )
  104.    20       CONTINUE
  105.          END IF
  106.       ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
  107. *
  108. *        Find normF(A).
  109. *
  110.          SCALE = ZERO
  111.          SUM = ONE
  112.          IF( N.GT.1 ) THEN
  113.             CALL DLASSQ( N-1, E, 1, SCALE, SUM )
  114.             SUM = 2*SUM
  115.          END IF
  116.          CALL DLASSQ( N, D, 1, SCALE, SUM )
  117.          ANORM = SCALE*SQRT( SUM )
  118.       END IF
  119. *
  120.       DLANST = ANORM
  121.       RETURN
  122. *
  123. *     End of DLANST
  124. *
  125.       END
  126.